package dao

import (
	"gorm.io/gorm"
)

// 数据库通用语言
type Page struct {
	PageSize int         `json:"pageSize,omitempty" form:"pageSize"`
	PageNum  int         `json:"pageNum,omitempty" form:"pageNum"`
	Total    int64       `json:"total"`
	Data     interface{} `json:"list"`
}

// 分页
func (p *Page) PageOpera(page Page) (start int, end int) {

	if page.PageSize <= 0 {
		page.PageSize = 10
	}

	if page.PageNum < 1 {
		page.PageNum = 1
	}

	return (page.PageNum - 1) * page.PageSize, page.PageSize * page.PageNum

}

func (p *Page) GetOffset() int {
	return (p.GetPageNum() - 1) * p.GetPageSize()
}

func (p *Page) GetPageNum() int {
	if p.PageNum <= 0 {
		p.PageNum = 1
	}
	return p.PageNum
}

func (p *Page) GetPageSize() int {
	if p.PageSize == 0 {
		p.PageSize = 10
	}
	return p.PageSize
}

func Paginate(page Page, db *gorm.DB) func(db *gorm.DB) *gorm.DB {

	return func(db *gorm.DB) *gorm.DB {
		return db.Offset(page.GetOffset()).Limit(page.GetPageSize())
	}
}

func GetCount(db *gorm.DB) func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {
		return db.Offset(-1).Limit(-1)
	}
}

var PageDao = new(Page)
